//============================================================================
// Nome        : DataCal.cpp
// Autores     : Grupo 12 da turma 2MIEIC4
//	 		     Luis Carlos Calado Lameirão Goncalves (050509043)
//		         Paula Francisca Ferreira Teixeira (090509139)
//			     Paulo Jorge de Faria dos Reis (080509037)
// Versão      : 1.0
// Data        : Novembro de 2009
// Copyright   : Creative Commons 2.0
// Descrição   : CAL 2011 - TG1
//               Tema 12 - Transporte de pacientes de uma clínica de saúde.
// Nota        : Código reutilizado de trabalho anterior.
//============================================================================

#ifndef DATA_H_
#define DATA_H_
#include <iostream>
#include <vector>
#include <stdio.h>
#include "auxiliar.h"
using namespace std;

//! Classe para tratamento de datas.
/*! Trabalha com datas no formato dd-mm-aaaa.
 *  Funcionalidades disponibilizadas:
 *  - Comparação de datas;
 *  - Envio para stream de saída;
 *  - Recolha dos valores da data a partir da stream de entrada;
 */
class DataCal{
	int dia, mes, ano;				//! Os dados são guardados internamente como inteiros
public:
	DataCal();						//! Construtor da Classe vazio.
	DataCal(int d, int m, int a);	//! Construtor que recebe os dados como inteiros.
	DataCal(string linha);			//!	Construtor da Classe DataCal que recebe uma string para conversão para inteiros.
									//! dividindo a string em três variáveis: dia, mes e ano.
	~DataCal();						//! Destrutor da Classe.

	void setDia (int d);			//! Recebe um inteiro para a variável dia.
	void setMes (int m);			//! Recebe um inteiro para a variável mes.
	void setAno (int a);			//! Recebe um inteiro para a variável ano.

	int getDia();					//! Retorna um inteiro referente à variável dia.
	int getMes();					//! Retorna um inteiro referente à variável mes.
	int getAno();					//! Retorna um inteiro referente à variável ano.
	string getData();				//! Retorna a data numa única string no formato dd-mm-aaaa

	DataCal operator =(string linha);	//! Overload do operador de atribuição, que recebe uma string e faz a conversão para inteiro,
										//! dividindo a string em três variáveis: dia, mes e ano. Semelhante ao construtor.

	bool operator == (DataCal &b);	//! Overload do operador de comparação, para comparar datas. Faz comparações entre dias, meses e anos.
	bool operator < (DataCal &b);	//! Overload do operador de menor, para comparar datas. Faz comparações entre dias, meses e anos.
	bool operator <= (DataCal &b);	//! Overload do operador de menor ou igual, para comparar datas. Faz comparações entre dias, meses e anos.
	bool operator > (DataCal &b);	//! Overload do operador de maior, para comparar datas. Faz comparaçães entre dias, meses e anos.
	bool operator >= (DataCal &b);	//! Overload do operador de maior ou igual, para comparar datas. Faz comparações entre dias, meses e anos.

	friend ostream & operator << (ostream &out, const DataCal &b)   //! Overload do operador de escrita, para escrever datas.
	{
		out << b.dia << "-" << b.mes << "-" << b.ano;
		out << endl;
		return out;
	};

	friend istream & operator >> (istream &in, DataCal &b)		  //! Overload do operador de leitura, para ler datas.
	{
		char t1, t2;
		int d, m, a;
		in >> d >> t1 >> m >> t2 >> a ;
		b.setDia(d);
		b.setMes(m);
		b.setAno(a);
		return in;
	};
};
#endif /* DATA_H_ */
